#ifndef _JIAJIA_REDUCE_H
#define _JIAJIA_REDUCE_H

#define JiaJia_parse_shi()
#define JiaJia_parse_accept()

#define JiaJia_REDUCE_ENV_EXPR 0
#define JiaJia_REDUCE_ENV_IF_COND 1

typedef struct JiaJia_item{
    int16_t item;
    int32_t word_num;
    JiaJia_word_pt word_list;
    struct JiaJia_item *next;
} JiaJia_item_t, *JiaJia_item_pt;

typedef struct JiaJia_reduce{

} JiaJia_reduce_t, *JiaJia_reduce_pt;

extern void JiaJia_item_meminit(void *, size_t);
extern void JiaJia_item_memfree(void *, size_t);

extern JiaJiaLmcc_pdata_t *JiaJia_next_pdata();

extern JiaJia_word_pt JiaJia_reduce_next_word();
extern void JiaJia_reduce_push_item(int16_t, JiaJia_word_pt, int32_t);
extern JiaJia_item_pt JiaJia_reduce_pop_item();

extern int8_t JiaJia_reduce();
extern int8_t JiaJia_reduce_lmcc();
extern int8_t JiaJia_reduce_block();
extern int8_t JiaJia_reduce_stmts();
extern int8_t JiaJia_reduce_break();
extern int8_t JiaJia_reduce_continue();
extern int8_t JiaJia_reduce_loop();
extern int8_t JiaJia_reduce_until();
extern int8_t JiaJia_reduce_if();
extern int8_t JiaJia_reduce_elif();
extern int8_t JiaJia_reduce_else();
extern int8_t JiaJia_reduce_shifou();
extern int8_t JiaJia_reduce_expr();
extern int8_t JiaJia_reduce_orexpr();
extern int8_t JiaJia_reduce_andexpr();
extern int8_t JiaJia_reduce_eqexpr();
extern int8_t JiaJia_reduce_compexpr();
extern int8_t JiaJia_reduce_linkexpr();
extern int8_t JiaJia_reduce_arithexpr();
extern int8_t JiaJia_reduce_term();
extern int8_t JiaJia_reduce_value();
extern int8_t JiaJia_reduce_shi();
extern int8_t JiaJia_reduce_fou();
extern int8_t JiaJia_reduce_loopfactor();
extern int8_t JiaJia_reduce_constant();
extern int8_t JiaJia_reduce_de();
extern int8_t JiaJia_reduce_func();
extern int8_t JiaJia_reduce_index();
extern int8_t JiaJia_reduce_id();
extern int8_t JiaJia_reduce_seq_head();
extern int8_t JiaJia_reduce_seq();
extern int8_t JiaJia_reduce_seqn();
extern int8_t JiaJia_reduce_table_head();
extern int8_t JiaJia_reduce_table();
extern int8_t JiaJia_reduce_tablen();

#endif
